iT邦幫忙

2023 iThome 鐵人賽

DAY 18
1
Cloud Native

AWS AI交易室實戰系列 第 18

Day 18 - AWS Glue & Athena

  • 分享至 

  • xImage
  •  

~ 膠水與雅典娜 ~

AWS Glue 是一種無伺服器、可擴展的資料整合服務,可讓您更輕鬆地探索、準備、移動和整合來自多個來源的資料,以進行分析、機器學習 (ML) 和應用程式開發。~ by AWS ~

每一次 AWS 官方的解釋都讓我一頭霧水,這也難怪,服務既要設計得有彈性可擴展,功能當然是涵蓋的面向會很廣,講白話一些,AWS Glue 就是 AWS 的 ETL 服務,不過這個服務本身可以提供查詢語言下指令去查詢資料,其所內建的資料表我們稱為 AWS Glue Data Catalog。

Amazon Athena 是一種互動式查詢服務,可在 Amazon S3 中使用標準 SQL 簡單地直接分析資料。Athena 是無伺服器服務,因此無需設定或管理基礎設施,並且您可以選擇根據執行的查詢或查詢所需的運算付費。使用 Athena 處理日誌、執行資料分析及執行互動式查詢。Athena 會自動擴展 (平行執行查詢),所以可以很快取得結果,即使是大型資料集和複雜查詢也是一樣。~ by AWS ~

AWS Athena 簡單的說就是可以下 SQL 的互動式 Dashboard,可以直接下到 S3,但是因為 S3 存放的檔案多半是沒有結構化的資料,所以需要 AWS Glue 做先期處理,通過簡單的 SQL 在 Athena 就可以生成漂亮的圖表了。

我們直接來看一個應用:

  • 準備資料,這是一個關於 Dota 2 遊戲的比賽資料,進入下方頁面後點擊右上角「Download」下載資料
    https://www.kaggle.com/datasets/devinanzelmo/dota-2-matches

  • 解壓縮後,會是一個 archive 的資料夾,裡面長這樣,如下左圖

  • 請依檔名建立資料夾並將檔案放置於內,如下右圖:
    會這樣做的原因是因為會這樣做的原因是因為 Athena 會視資料夾內的檔案為同一種檔案結構去分析
    create folders

  • 然後我們建立一個叫”marathon-data-lake”的 S3 Bucket,然後把檔案傳上去

# in Day16/archive directory
$ aws s3 mb s3://marathon-data-lake
make_bucket: marathon-data-lake

# file upload
$ aws s3 cp archive/ s3://marathon-data-lake --recursive
  • 接著我們就可以建立 Glue 的 Crawler 去把資料爬到 Glue 的資料庫裡面,我們先建立資料庫,還要建立有讀取 s3 權限的 policy & crawler 所需要的角色,把 policy attach 到 crawler 上面
# in Day16/ directory
# create glue database
$ aws glue create-database --database-input "{\"Name\":\"marathon-data-lake-db\"}"

# create policy
$ aws iam create-policy --policy-name DataLakeReadAccess \
--policy-document file://policy.json

# create role
$ aws iam create-role \
--role-name GlueCrawlerRole --assume-role-policy-document file://role-policy.json

# allocate two policies: the AWSGlueServiceRole policy (this is managed by AWS) and the DataLakeReadAccess policy we created earlier.
$ aws iam attach-role-policy \
--role-name GlueCrawlerRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
$ aws iam attach-role-policy --role-name GlueCrawlerRole --policy-arn arn:aws:iam::<ACCOUNT-ID>:policy/DataLakeReadAccess
  • 萬事俱備,然後我們就可以建立 crawler,建立後 Run Crawler:
# create crawler
$ aws glue create-crawler \
--name marathon-crawler \
--role arn:aws:iam:<ACCOUNT-ID>:role/GlueCrawlerRole \
--database-name marathon-data-lake-db \
--targets "{\"S3Targets\":[{\"Path\":\"s3://marathon-data-lake\"}]}"

# run the crawler
$ aws glue start-crawler --name marathon-crawler 

# list all tables created
$ aws glue get-tables --database-name marathon-data-lake-db
  • 接著我們打開 web console 進入 Athena 服務:

  • 我們要先到設定設定查詢結果放的 s3 bucket 目錄位置:(可以設定為 s3://marathon-data-lake/results/ )

    Amazon Athena -> Query editor -> Manage settings

  • 然後在 Query Editor 貼上下面 SQL 接著按 Run,可以得到資料

SELECT
  players.account_id,
  players.last_hits,
  heros.localized_name
FROM "marathon-data-lake-db"."players" AS players
INNER JOIN "marathon-data-lake-db"."hero_names" AS heros
ON heros.hero_id = players.hero_id
LIMIT 20;
  • 結果如下圖:
    results

  • 用完後記得清理資源

# 刪除 crawler
$ aws glue delete-crawler --name <crawler-name>

# 刪除 crawler database
$ aws glue delete-database --name <database-name>

# 刪除 s3 bucket
$ aws s3 rb s3://<bucket-name>

本日簡單介紹了 AWS 資料處理的服務,感受一下在雲端處理大量資料的基本形式,S3 服務作為存儲資料第一選擇,自然就理所當然是處理結果的存放地點,後續要從其他服務透過 SDK 處理相信是不太困難的事情。

參考資料:


上一篇
Day 17 - AWS Data Exchange
下一篇
Day 19 - Amazon SageMaker 介紹與訓練資料準備
系列文
AWS AI交易室實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言